*************************
*                       *
* INPUT/OUTPUT HGR CHAR *
*   (C)1989 BY DECKARD  *
*                       *
*************************
*
CARAC    EQU   $0801      ; DEBUT DATAS CARACTERES
                          ;
CURSOR   EQU   $09F1      ; 1ER DATA DU CURSEUR (= '^') (+$1F0)
CARAC2   EQU   $0B01      ; STOCKAGE JEU EXTRA PRESENTATION (+$300)
DATASP   EQU   $0BC1      ; STOCKAGE DATA SPRITE
COUT1    EQU   $FDF0
WAIT     EQU   $FCA8
KEYBRD   EQU   $C000
ZKEYBRD  EQU   $C010
                          ;
                          ;
                          ; PAGE ZERO
                          ;
CSWL     EQU   $36        ; POINTE NORMALEMENT SUR COUT1
CSWH     EQU   $37
KSWL     EQU   $38        ; POINTE NORMALEMENT SUR KEYIN
KSWH     EQU   $39
GBASL    EQU   $26
GBASH    EQU   $27
BASL     EQU   $28
BASH     EQU   $29
BAS2L    EQU   $2A
BAS2H    EQU   $2B
CH       EQU   $24
CV       EQU   $25
INVFLG   EQU   $32        ; MASQUE POUR NORMAL/INVERSE
LARGEUR  EQU   $21
MARGEG   EQU   $20
MARGEH   EQU   $22
MARGEB   EQU   $23
XMAX     EQU   $1C
Y        EQU   $1A
X        EQU   $09
ETAT2    EQU   $E7        ; ON N'UTILISE PAS SCALE
                          ;
                          ;
                          ;
         ORG   $16E1
                          ;
                          ; ---------
                          ; I N P U T
                          ; ---------
                          ;
*
* BUT: AFFICHER UN CURSEUR QUI CHANGE SANS ARRET
*
                          ;
                          ;
* ON AFFICHE LE CURSEUR
                          ;
INPUT    PHA              ; MET DE COTE LE CURSEUR ACTUEL
INPUT2   STY   INSTORE
         STX   INSTORE+1
         LDA   #$DE       ; CODE ASCII DE '^'
         JSR   SCREEN
                          ;
* ON FAIT UNE ROTATION DE BAS EN HAUT
                          ;
         LDA   CURSOR
         TAX              ; SAUVEGARDE 1ER OCTET
         LDY   #0
ROTATION LDA   CURSOR+1,Y
         STA   CURSOR,Y
         INY
         CPY   #7         ; ON EN FAIT 7
         BNE   ROTATION
         TXA              ; RECUPERE 1ER OCTET
         STA   CURSOR+7   ; ACCOMPLI LA ROTATION (1ER = DERNIER)
                          ;
* AFFICHAGE DES SPRITES MOBILES+GENERATEUR ALEATOIRE
                          ;
         JSR   SPMOBIL0
                          ; RESTAURE
         LDY   INSTORE
         LDX   INSTORE+1
                          ;
* CONTINUE
                          ;
         JSR   SUITE
         JMP   INPUT2
                          ;
SUITE    LDA   KEYBRD
         BMI   SUITE2
         LDA   #$B0
         JMP   WAIT
SUITE2   PLA              ; RECUPERE LE CURSEUR SAUVE
         PLA              ; 2 PLA EN + CAR IL Y A EUT UN JSR
         PLA
         STA   (BASL),Y
         LDA   KEYBRD
         BIT   ZKEYBRD
         RTS
                          ;
                          ; -----------
                          ; O U T P U T
                          ; -----------
                          ;
*
* BUT: ECRIRE A LA FOIS SUR ECRAN TEXT ET SUR ECRAN HGR
*
                          ;
OUTPUT   CMP   #$A0       ; = ESPACE
         BCC   OTHER      ; POUR LES CARACTERES < A L'ESPACE
         STA   OUTSTORE   ; SAUVE POUR ECRAN TEXTE
         STY   OUTSTORE+1
         STX   OUTSTORE+2
VASY     LDY   ETAT2
         BEQ   VASY2
         PHA
         JSR   OKDECAL
         PLA
VASY2    JSR   SCREEN
BITJSR   DFB   #$2C       ; BIT OU JSR
         DFB   #<TRT_RTN,#>TRT_RTN
         LDA   OUTSTORE   ; RECUPERE POUR ECRAN TEXTE
         LDY   OUTSTORE+1
         LDX   OUTSTORE+2
         JMP   BYE2
                          ;
OTHER    PHA
         LDA   ETAT
         BEQ   BYE2+1     ; SI 0 RTN ET FLECHE NON AUTORISEE
         PLA
         CMP   #$8D       ; RETURN?
         BNE   OTHER2
         PHA
         LDA   #$20
         STA   BITJSR     ; BRANCHE LE JSR
         PLA              ; RECUPERE ACC
IDEM     STA   OUTSTORE   ; SAUVE POUR ECRAN TEXTE
         STY   OUTSTORE+1
         STX   OUTSTORE+2
         LDA   #$A0
         JMP   VASY
OTHER2   CMP   #$88       ; FLECHE GAUCHE?
         BEQ   IDEM
                          ;
* SAUT A LA SUBROUTINE NORMALE
                          ;
BYE2     BIT   $68        ; FAUX BIT. C'EST : PLA
         JMP   COUT1
                          ;
OUTSTORE DFB   0,0,0
INSTORE  DFB   0,0
ETAT     DFB   0
                          ;
                          ; TRAITEMENT RETURN EN LIGNE 24
                          ;
TRT_RTN  LDA   #$2C
         STA   BITJSR     ; RETABLI LE BIT
         JSR   TESTY
         LDA   ETAT2
         BEQ   RTNFIN
         JMP   OKDECAL
RTNFIN   RTS
                          ;
                          ;
                          ;
                          ; AFFICHE SUR ECRAN HGR
                          ;
SCREEN   SEC
         SBC   #$A0       ; OBTIENT LE NUMERO DU CARACTERE
         LDY   #$00
         STY   GBASH
         ASL
         ASL
         ROL   GBASH
         ASL
         ROL   GBASH
C1       ADC   #<CARAC    ; +CARAC POUR DETERMINER LES DATAS
         STA   GBASL
         LDA   GBASH
C2       ADC   #>CARAC
         STA   GBASH
                          ;
         CLC
         LDA   BASL
         ADC   CH         ; POSITION HORIZONTALE DU CURSEUR
         STA   BAS2L
         LDA   BASH
MODE     ADC   #$1C       ; POUR AVOIR HGR
         STA   BAS2H
                          ;
                          ; ECRITURE
                          ;
WRITE    LDA   (GBASL),Y  ; DATA CARAC
         LDX   INVFLG
         CPX   #$FF
         BEQ   AFFIC
         EOR   #$FF       ; AFFICHE EN INVERSE
AFFIC    STA   (BAS2L),Y
         CLC
         LDA   BAS2L
         ADC   #$FF
         STA   BAS2L      ; POSITIONNE POUR OCTET SUIVANT
         LDA   BAS2H
         ADC   #$03
         STA   BAS2H
         INY
         CPY   #$08       ; A-T-ON FAIT LES 8 OCTETS (= 1 CARACTERE)
         BNE   WRITE
                          ;
* OPERATIONS VIRTUELLES DE TESTS POUR DECALAGE
                          ;
         LDA   OUTSTORE
         BCC   AUTRECAR   ; AUTRES TOUCHES ENFONCEES
         LDY   CH         ; TEST DE X
         INY
         CPY   LARGEUR
         BPL   TESTY
         RTS
TESTY    LDY   CV         ; CHANGEMENT DE LIGNE
         INY
         CPY   MARGEB
         BNE   TESTY-1    ; ON EST PAS EN BAS DE L'ECRAN
                          ;
         LDA   #1         ; ON FORCE L'ETAT2 A 1
         STA   ETAT2
         RTS
                          ;
                          ;
AUTRECAR CMP   #$8D       ; RETURN?
         BEQ   TESTY
         RTS
                          ;
                          ;
OKDECAL  JSR   DECALAGE
         LDA   #0         ; RETABLI ETAT POUR NE PLUS DECALER
         STA   ETAT2
         RTS
                          ;
         DS    3,$EA
                          ;
                          ; DECALAGE
                          ;
DECALAGE LDA   MARGEH
         STA   Y
         LDA   MARGEG
         STA   X
         LDA   #$00       ; POSITION DU CURSEUR TOUJOURS NULLE
         STA   CH
         LDA   LARGEUR
         STA   LECPX+1
FOLLOW1  JSR   CALC
         LDA   DATAL
         STA   POKE+1
         LDA   DATAH
         STA   POKE+2
         INC   Y
         JSR   CALC
         LDA   DATAL
         STA   PEEK+1
         LDA   DATAH
         STA   PEEK+2
                          ; BOUCLE
         LDA   #$00
         STA   CPT
         JSR   PEEK-2
         JMP   INCR
         LDX   #$00
PEEK     LDA   $FFFF,X    ; LDA $????,X
POKE     STA   $FFFF,X    ; STA $????,X
         INX
LECPX    CPX   #$00       ; CPX #$??
         BNE   PEEK
         INC   CPT
         LDY   CPT
         CPY   #$08       ; LES 8 OCTETS SONT AFFICHES?
WHERE    BNE   NEXTOCT
         RTS
                          ;
CPT      DFB   0
                          ; LIGNE D'OCTETS SUIVANTE
NEXTOCT  CLC
         LDA   PEEK+2
         ADC   #$04
         STA   PEEK+2
NEXTOCT2 CLC
         LDA   POKE+2
         ADC   #$04
         STA   POKE+2
         JMP   PEEK-2     ; FAIT UNE AUTRE LIGNE D'OCTETS
                          ; INCREMENTE LIGNE DE CARACTERES
INCR     LDA   MARGEB
         TAX
         DEX
         CPX   Y
         BNE   FOLLOW1
                          ; AFFICHE DES BLANCS SUR LA DERNIERE LIGNE
         LDA   #$EA       ; ON MET UN NOP
         STA   PEEK
         LDA   #$A9       ; LDA #$00
         STA   PEEK+1
         LDA   #$00
         STA   PEEK+2
         STA   CPT
         LDA   DATAL      ; REPOSITIONNE SUR LA 1ERE LIGNE D'OCTETS
         STA   POKE+1
         LDA   DATAH
         STA   POKE+2
                          ; EMPECHE L'INCREMENTATION DU LDA $????,X
         LDA   #$0B       ; SAUTE DIRECTEMENT EN NEXTOCT2
         STA   WHERE+1
         JSR   PEEK-2     ; REMPLISSAGE DE BLANCS
                          ; RESTAURE LE LDA $????,X
         LDA   #$BD
         STA   PEEK
                          ; RESTAURE LE BNE NEXTOCT
         LDA   #$02
         STA   WHERE+1
         RTS
                          ;
                          ; CALCUL LA POSITION ECRAN
                          ;
CALC     LDX   Y
         LDA   DATA1,X
         PHA
         LDA   DATA2,X
         EOR   $E6        ; PAGE ECRAN ($20 OU $40)
         TAY
         CLC
         PLA
         ADC   X
         STA   DATAL
         TYA
         ADC   #$00       ; RETENUES
         STA   DATAH
         RTS
                          ;
DATAL    DFB   0
DATAH    DFB   0
                          ;
                          ; DATAS GRAPHIQUES
                          ;
DATA1    HEX   0080008000800080
         HEX   28A828A828A828A8
         HEX   50D050D050D050D0
DATA2    HEX   0000010102020303
         HEX   0000010102020303
         HEX   0000010102020303
                          ;
         DS    7,$EA
                          ;
                          ;
***********************
*                     *
* COMMANDES ANNEXES & *
* (C)1989 BY DECKARD  *
*                     *
***********************
*
                          ;
ERROR    EQU   $DEC9      ; SYNTAX ERROR
ADDON    EQU   $D998
GETBYT   EQU   $E6F8
CHECKCOM EQU   $DEBE
SPEAK    EQU   $C030
CPTL     EQU   $06
CPTX     EQU   $07
                          ;
                          ;
         LDX   #$00
         STX   CPT
D1       LDY   #$00
D2       LDA   NEWCMD,X
         BEQ   D5
         CMP   #$FF
         BEQ   D3
         CMP   ($B8),Y
         BNE   D4
         INY
         INX
         BNE   D2
D3       JMP   ERROR
D4       INX
         LDA   NEWCMD,X
         BNE   D4
         INX
         INC   CPT
         BNE   D1
D5       JSR   ADDON      ; Y=Y+1
         ASL   CPT
         LDX   CPT
         LDA   ADRCMD+1,X
         PHA
         LDA   ADRCMD,X
         PHA
         RTS
                          ;
CPT2     DFB   0
                          ;
*
* LISTE DES COMMANDES
*
                          ;
NEWCMD                    ; &MUSIC
         HEX   4D5553494300
                          ; &SOUND
         HEX   534F554E4400
                          ; &WINDOW
         HEX   57494E444F5700
                          ; &NOISE
         HEX   4E4F49534500
                          ; &SCRN
         HEX   5343524E00
                          ; &SPRITE
         HEX   53505249544500
                          ; &SET
         HEX   53455400
                          ; &CLS
         HEX   434C5300
                          ; &CADRE
         HEX   434144524500
                          ; &RELIRE
         HEX   52454C49524500
                          ;
                          ; ERROR
         HEX   FF
                          ;
*
* LISTE DES ADRESSES
*
                          ;
ADRCMD                    ; &MUSIC
         DFB   #<MUSIC-1,#>MUSIC
                          ; &SOUND
         DFB   #<SOUND-1,#>SOUND
                          ; &WINDOW
         DFB   #<WINDOW-1,#>WINDOW
                          ; &NOISE
         DFB   #<NOISE-1,#>NOISE
                          ; &SCRN
         DFB   #<SCRN-1,#>SCRN
                          ; &SPRITE
         DFB   #<SPRITE-1,#>SPRITE
                          ; &SET
         DFB   #<SET-1,#>SET
                          ; &CLS
         DFB   #<CLS-1,#>CLS
                          ; &CADRE
         DFB   #<CADRE-1,#>CADRE
                          ; &RELIRE
         DFB   #<RELIRE-1,#>RELIRE
                          ;
*
* MUSIQUE
*
                          ;
MUSIC    JSR   GETBYT     ; LIRE LE NOMBRE DE NOTE
         STX   CPTMUS
AGAIN    LDA   CPTMUS
         BEQ   FINMUS
         JSR   CHECKCOM
         JSR   GETBYT     ; LECTURE SON
         STX   $EC
         JSR   CHECKCOM
         JSR   GETBYT     ; LECTURE DUREE
MUSICD   STX   $ED
MUS1     LDA   $C030
MUS2     DEY
         BNE   MUS3
         DEC   $ED
         BEQ   MUS4
MUS3     DEX
         BNE   MUS2
         LDX   $EC
         JMP   MUS1
MUS4     DEC   CPTMUS
         JMP   AGAIN
FINMUS   RTS
CPTMUS   DFB   0
                          ;
*
* WINDOW
*
                          ;
WINDOW   JSR   GETBYT
         STX   $20
         JSR   CHECKCOM
         JSR   GETBYT
         STX   $21
         JSR   CHECKCOM
         JSR   GETBYT
         STX   $22
         JSR   CHECKCOM
         JSR   GETBYT
         STX   $23
         RTS
                          ;
*
* SOUND
*
                          ;
SOUND    JSR   STOCK
SOUNDD   LDA   #$01
         STA   AD2
         LDY   #$00
                          ;
DEBUT    LDA   AD3
         PHA
         LDX   AD1
DEX1     DEX
         BNE   DEX1
         BIT   SPEAK
         LDX   AD2
DEX2     DEX
         BNE   DEX2
         BIT   SPEAK
         PLA
         TAX
         DEX
         TXA
         BNE   DEBUT+3
         CPY   #$01
         BEQ   LA
                          ;
ICI      LDA   AD2
         CLC
         ADC   #$01
         CMP   #$1B
         BEQ   CHANGE
         STA   AD2
         DEC   AD1
         JMP   DEBUT
CHANGE   INY
         JMP   DEBUT
                          ;
LA       LDA   AD2
         SEC
         SBC   #$01
         CMP   #$01
         BEQ   FINSOUND
         STA   AD2
         INC   AD1
         JMP   DEBUT
                          ;
FINSOUND RTS
                          ;
STOCK    JSR   GETBYT
         STX   AD1
         JSR   CHECKCOM
         JSR   GETBYT
         STX   AD3
         RTS
                          ;
AD1      DFB   $00
AD2      DFB   $00
AD3      DFB   $00
                          ;
*
* NOISE
*
                          ;
                          ; NB    EN AD1
                          ; COMPT EN AD3
                          ; FREQ  EN AD2
                          ;
NOISE    JSR   STOCK
         JSR   CHECKCOM
         JSR   GETBYT
NOISED   STX   AD2
                          ;
         LDA   #0
         STA   CPT2
                          ;
BCL1     LDX   AD2
BCL2     LDA   CPT2
         ADC   AD3
         STA   CPT2
         TAY
BCL3     DEY
         BNE   BCL3
         LDA   SPEAK
         TXA
         TAY
BCL4     DEY
         BNE   BCL4
         LDA   SPEAK
         DEX
         BNE   BCL2
         DEC   AD1
         BNE   BCL1
         RTS
                          ;
*
* SCRN
*
                          ;
SCRN     LDA   #0         ; TESTEUR DE DECALAGE
         STA   ETAT2
         JSR   STOCK      ; LECTURE DES DONNEES
                          ; BRANCHE CSWL/CSWH
         LDA   AD1
         BEQ   CSWNORM
         LDA   #<OUTPUT
         LDX   #>OUTPUT
         JMP   FOLLOW2
CSWNORM  LDA   #$F0
         LDX   #$FD
FOLLOW2  STA   CSWL
         STX   CSWH
         LDX   AD3
         BEQ   KSWNORM
         DEX
         BEQ   FOLLOW10
         LDA   #<INPUT_2
         LDX   #>INPUT_2
         JMP   FOLLOW3
FOLLOW10 LDA   #<INPUT
         LDX   #>INPUT
         JMP   FOLLOW3
KSWNORM  LDA   #$1B
         LDX   #$FD
FOLLOW3  STA   KSWL
         STX   KSWH
         RTS
                          ;
*
* SPRITE
*
                          ;
SPRITE   JSR   STOCK
         JSR   CHECKCOM
         JSR   GETBYT
         STX   Y
         LDA   AD3
         STA   X
                          ; NO SPRITE*(4*8)
         LDA   AD1
SPRITED  STA   $EC
         LDA   #32
         STA   $ED
         JSR   MULT
                          ; +DEBUT DATA SPRITE
         CLC
         LDA   $EF        ; RESULTAT(-)
         ADC   #<DATASP
         STA   LOAD+1
         LDA   $EE        ; RESULTAT(+)
         ADC   #>DATASP
         STA   LOAD+2
                          ;
         LDA   #0
         STA   CPTL       ; ON SE POSITIONNE POUR LE BLOC (=2 CARAC)
         STA   CPTX       ; COMPTEUR LECTURE DATA SPRITE
         LDA   #16
         STA   NBF+1
                          ;
FOLLOW4  JSR   CALC
         LDA   DATAL
         STA   ECRIT+1
         LDA   DATAH
         STA   ECRIT+2
         LDX   CPTX
                          ;
FOLLOW5  LDY   #$00
LOAD     LDA   $FFFF,X    ; LDA $????,X
ECRIT    STA   $FFFF,Y    ; STA $????,Y
         INX
         INY
         CPY   #$02
         BNE   LOAD
NBF      CPX   #16
         BEQ   FOLLOW6
                          ; +$400 POUR LIGNE SUIVANTE
         CLC
         LDA   ECRIT+2
         ADC   #$04
         STA   ECRIT+2
         JMP   FOLLOW5
                          ;
FOLLOW6  INC   CPTL
         LDA   CPTL
         CMP   #$02
         BEQ   ENDSP      ; ON A ECRIT 2 BLOC L'1 AU DESSUS DE L'AUTRE
                          ;
         STX   CPTX
         INC   Y          ; POUR ECRIRE LE SECOND BLOC
         ASL   NBF+1
         JMP   FOLLOW4    ; RECOMMENCE PR 2EME BLOC
                          ;
ENDSP    RTS              ; FIN AFFICHAGE SPRITE
                          ;
*
* MODULE MULTIPLICATION
*
                          ;
MULT     LDA   #$00
         STA   $EE
         LDX   #$08
FOLLOW7  ASL
         ROL   $EE
         ASL   $ED
         BCC   FOLLOW8
         CLC
         ADC   $EC
         BCC   FOLLOW8
         INC   $EE
FOLLOW8  DEX
         BNE   FOLLOW7
         STA   $EF
         RTS
                          ;
*
* SET
*
                          ;
SET      JSR   GETBYT
         CPX   #$01
         BNE   FOLLOW9
                          ; BRANCHE SUR L'EXTRA SET
SET1D    LDA   #<CARAC2
         LDX   #>CARAC2
         JMP   SETEND
                          ; MET LE SET NORMAL
FOLLOW9  LDA   #<CARAC
         LDX   #>CARAC
SETEND   STA   C1+1
         STX   C2+1
         RTS
                          ;
*
* &CLS
*
                          ;
CLS      LDA   MARGEH
         STA   Y
         LDA   MARGEG
         STA   X
         LDA   LARGEUR
         STA   LECPX2+1
CLS2     JSR   CALC
         LDA   DATAL
         STA   POKE2+1
         LDA   DATAH
         STA   POKE2+2
         LDA   #0
         STA   CPT
         JSR   PEEK2-2
         JMP   INCR2
         LDX   #0
PEEK2    LDA   #0
POKE2    STA   $FFFF,X    ; STA $????,X
         INX
LECPX2   CPX   #$00       ; CPX #$??
         BNE   PEEK2
         INC   CPT
         LDY   CPT
         CPY   #$08
         BNE   NEXTOCTT
         RTS
                          ;
NEXTOCTT CLC
         LDA   POKE2+2
         ADC   #$04
         STA   POKE2+2
         JMP   PEEK2-2
                          ;
INCR2    LDA   MARGEB
         TAX
         DEX
         CPX   Y
         BEQ   FINCLS
         INC   Y
         JMP   CLS2
FINCLS   LDA   #0
         STA   CH
         LDA   MARGEH
         STA   CV
         JSR   POSITION
         RTS
                          ;
*
* &CADRE
*
                          ;
HCLR     EQU   $F3F2      ; EFFACE ECRAN GRAPHIQUE (FOND NOIR)
HOME     EQU   $FC58
OUTDO    EQU   $DB5C
STROUT   EQU   $DB3A
POSITION EQU   $FC22
                          ;
                          ;
CADRE    JSR   SET1D      ; BRANCHE LE JEU DE CARACTERES ANNEXE
         JSR   HOME
         BIT   $C051      ; ON PASSE EN TXT POUR PAS VOIR L'EFFACEMENT
         JSR   HCLR       ; EFFACE ECRAN HGR
         BIT   $C050      ; REPASSE EN MODE GRAPHIQUE
         BIT   $C054
         BIT   $C057
         BIT   $C052
                          ;
                          ; ECRITURE DU CADRE
                          ;
         LDA   #0
         STA   CH
         STA   CV
         JSR   POSITION
         LDA   #<TRAIT_1
         LDY   #>TRAIT_1
         JSR   STROUT
         LDA   #24
         STA   CH
         LDA   #7
         STA   CV
         JSR   POSITION
         LDA   #<TRAIT_3
         LDY   #>TRAIT_3
         JSR   STROUT
         LDA   #0
         STA   CH
         LDA   #23
         STA   CV
         JSR   POSITION
         LDA   #<TRAIT_2
         LDY   #>TRAIT_2
         JSR   STROUT
                          ; AFFICHE TRAITS VERTICAUX CADRE PERSO
         LDA   #24
         LDX   #$A4       ; '$'
         JSR   MODPRES
         LDA   #39
         LDX   #$A3       ; '#'
         JSR   MODPRES
                          ; TRAITS VERTICAUX CADRE ECRAN
         LDA   #11
         STA   CPTPRES
         LDA   #1
         STA   CV
PRESBCL  LDA   #0
         STA   CH
         JSR   POSITION
         LDX   #$AC       ; ','
         LDY   #$AD       ; '-'
         TXA
         JSR   OUTDO
         INC   CV
         DEC   CH
         JSR   POSITION
         TYA
         JSR   OUTDO
         DEC   CV
         LDA   #23
         STA   CH
         JSR   POSITION
         TYA
         JSR   OUTDO
         INC   CV
         DEC   CH
         JSR   POSITION
         TXA
         JSR   OUTDO
         INC   CV
         DEC   CPTPRES
         BNE   PRESBCL
         JMP   FOLLOW9    ; RETABLIT JEU CARAC NORMAL+FIN
                          ;
CPTPRES  DFB   0
                          ;
                          ;
                          ;
MODPRES  STA   CH
         LDY   #6
CONTPRES PHA
         STY   CV
         JSR   POSITION
         TXA
         JSR   OUTDO
         PLA
         STA   CH
         DEY
         BNE   CONTPRES
         RTS
                          ;
                          ;
TRAIT_1  ASC              "()))))))01234567*******+ !!!!!!!!!!!!!!&"
         DFB   0
TRAIT_2  ASC              ".)))))))))))***********/"
         DFB   0
TRAIT_3  DFB   $A2
         ASC              "''''''''''''''%"
         DFB   0
                          ;
                          ; &RELIRE
                          ;
RELIRE   JSR   $DD67
         JSR   $E752
         CLC
         JSR   $D61A
         BCS   RELIRE2
         LDX   #$5A
         JMP   $D412
                          ;
RELIRE2  LDA   $9B
         SBC   #$01
         LDY   $9C
         BCS   RELIRE3
         DEY
RELIRE3  STA   $7D
         STY   $7E
         JMP   $00B7
                          ;
                          ;
                          ;
**************************************************
*
* MISE EN MOUVEMENT DES SPRITES MOBILES
*
                          ;
SPMOBIL0 DEC   $4E
         INC   $4F
                          ;
SPMOBIL  LDX   SPMVT
         BEQ   FINMVT     ; PAS DE SPRITE EN MOUVEMENT
         STX   COPSPMVT   ; SAUVEGARDE COMME COMPTEUR
                          ;
SPMOBIL2 LDX   COPSPMVT
         BEQ   FINSPM     ; ON A FAIT TOUS LES SPRITES
         LDA   FILTRE
         BEQ   SPMOBIL3   ; FILTRE: (=0 SI SPRITE NORMAL/=1 PR COMPLEM.)
         LDA   SPM-1,X    ; PRENDS LE NUMERO DU SPRITE
         CLC
         ADC   #$1E       ; +30 POUR AVOIR LE COMPLEMENTAIRE
         JMP   SPMOBIL4
SPMOBIL3 LDA   SPM-1,X
SPMOBIL4 PHA
         LDA   SPMX-1,X   ; PRENDS COORDONNEE X DU SPRITE A POKER
         STA   X
         LDA   SPMY-1,X   ; PRENDS COORDONNEE Y DU SPRITE A POKER
         STA   Y
         PLA              ; RECUPERE LE NUMERO DU SPRITE
         JSR   SPRITED    ; AFFICHE SPRITE
         DEC   COPSPMVT   ; PASSE AU SPRITE PRECEDENT
         JMP   SPMOBIL2   ; ON RECOMMENCE
                          ;
FINSPM   LDA   SPCPT      ; COMPTEUR (0 A 3:FILTRE NON MODIFIE/4:MODIF)
         CMP   #$03
         BNE   FINMVT0
         LDA   #0         ; REPOSITIONNE COMPTEUR
         STA   SPCPT
         LDA   FILTRE     ; CHANGE ETAT DU FILTRE
         BEQ   FINSPM2
         LDA   #0         ; NOUVEAU FILTRE = 0
         DFB   $2C        ; FAUX BIT
FINSPM2  LDA   #1         ; NOUVEAU FILTRE = 1
         STA   FILTRE
FINMVT   RTS
                          ;
FINMVT0  INC   SPCPT      ; AUGMENTE COMPTEUR
         RTS
                          ;
SPMVT    DFB   0
COPSPMVT DFB   0
FILTRE   DFB   0
SPCPT    DFB   0
                          ;
                          ; DATAS SPRITES/X/Y
                          ;
SPM      DS    100        ; 100 SPRITES ACCUEILLABLES
SPMX     DS    100        ; COORD. X CORRESPONDANTES
SPMY     DS    100        ; COORD. Y CORRESPONDANTES
                          ;
                          ; INPUT2
                          ;
INPUT_2  PHA
         STY   INSTORE
         STX   INSTORE+1
         JSR   SPMOBIL0
         LDX   INSTORE+1
         LDY   INSTORE
         JSR   SUITE
         JMP   INPUT_2+1
                          ;
         SAV   CMD
